静态文件:上传服务器之后没有任何变化,上传是什么样,访问时就是什么样子

动态文件:不存在于服务器上的文件,他是由数据库等服务获取数据拼接成的

静态请求:请求html的请求

动态请求:请求的是非html文件

LNMP原理

1.用户通过`http`协议发起请求,请求会先抵达`LNMP`架构中的`Nginx`

2.`Nginx`会根据用户的请求进行判断,这个判断是有`Location`进行完成

3.判断用户请求的是静态页面,`Nginx`直接进行处理

4.判断用户请求的是动态页面,`Nginx`会将该请求交给`fastcgi`协议下发

5.`fastgi`会将请求交给`php-fpm`管理进程, `php-fpm`管理进程接收到后会调用具体的工作进程`warrap`

6.`warrap`进程会调用`php`程序进行解析,如果只是解析代码`php`直接返回

7.如果有查询数据库操作,则由`php`连接数据库(用户 密码 IP)发起查询的操作

8.最终数据由*`mysql->php->php-fpm->fastcgi->nginx->http->user`

LNMP概述

什么是LNMP

LNMP是一套技术的组合,L=Linux、N=Nginx、M=MySQL、P=PHP

静态请求:请求的页面都是html,服务器必须存在html文件

动态请求:请求的不是服务器上存在的html,带参数的请求
        动态页面不是一个存于服务器在的页面,是去数据库或其他库获取数据拼装成的页面;
lnmp 工作原理

1576203497276

1.用户发起请求,到达nginx

2.nginx判断是动态请求还是静态请求

#静态请求
location / {
    root /code;
    index index.html;
}

#动态请求
location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
}
3.如果是静态请求,nginx直接返回

4.如果是动态请求,nginx会通过fastcgi协议去找php-fpm管理进程

5.php-fpm管理进程调用、下发工作给wrapper工作进程

6.wrapper工作进程判断分析请求是否只是php内容

7.如果只是php内容,wrapper工作进程可以直接解析,然后返回结果

8.如果还有操作后面数据库等行为,他会帮你去请求数据库

9.最终数据由mysql->wrapper->php-fpm->fastcgi->nginx->http->user

LNMP架构搭建

1.安装nginx

1)配置nginx官方源

[root@web02 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
2)安装nginx

[root@web02 ~]# yum install -y nginx
3)创建用户与用户组

[root@web02 ~]# groupadd www -g 666
[root@web02 ~]# useradd www -u 666 -g 666
4)配置nginx用户

[root@web02 ~]# vim /etc/nginx/nginx.conf 
user  www;
5)启动nginx并开机自启

[root@web02 ~]# systemctl start nginx
[root@web02 ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
6)验证启动

[root@web02 ~]# ps -ef | grep nginx
root       8272      1  0 10:39 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www        8273   8272  0 10:39 ?        00:00:00 nginx: worker process
root       8301   8112  0 10:43 pts/1    00:00:00 grep --color=auto nginx
[root@web02 ~]#

2.安装PHP

1)配置第三方源

[root@web02 ~]# vim /etc/yum.repos.d/php.repo
[php-webtatic]
name = PHP Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0
2)卸载已安装的PHP

[root@web02 ~]# yum remove php-mysql-5.4 php php-fpm php-common
3)安装PHP 7.1版本

[root@web02 ~]# yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb
#yum安装会出一些问题,报错
1.上传压缩包(yum缓存的rpm)
2.解压代码包
[root@web02 tmp]# tar xf php.tar.gz 
3.安装所有rpm
[root@web02 tmp]# yum localinstall *.rpm
4)修改用户并启动PHP

[root@web02 tmp]# vim /etc/php-fpm.d/www.conf
user = www
group = www

[root@web02 tmp]# systemctl start php-fpm.service
[root@web02 tmp]# systemctl enable php-fpm.service
5)验证

[root@web02 tmp]# ps -ef | grep php
root       8673      1  0 11:21 ?        00:00:00 php-fpm: master process (/etc/php-fpm.conf)
www        8674   8673  0 11:21 ?        00:00:00 php-fpm: pool www
www        8675   8673  0 11:21 ?        00:00:00 php-fpm: pool www
www        8676   8673  0 11:21 ?        00:00:00 php-fpm: pool www
www        8677   8673  0 11:21 ?        00:00:00 php-fpm: pool www
www        8678   8673  0 11:21 ?        00:00:00 php-fpm: pool www
root       8683   8112  0 11:22 pts/1    00:00:00 grep --color=auto php
[root@web02 tmp]#

3.安装mariadb

1)安装mariadb

[root@web02 ~]# yum install mariadb-server -y
2)启动mariadb并加入开机自启

[root@web02 tmp]# systemctl start mariadb
[root@web02 tmp]# systemctl enable mariadb
3)验证

[root@web02 tmp]# mysql##进入数据库

MariaDB [(none)]> show databases;##查看数据库里面有什么库
create database xxx;##新建一个xxx库

5.搭建wordpress

1)上传包

[root@web02 ~]# rz wordpress-5.0.3-zh_CN.tar.gz

2)解压

[root@web02 ~]# tar xf wordpress-5.0.3-zh_CN.tar.gz

3)移动站点目录

[root@web02 ~]# mv wordpress /code/

4)授权

[root@web02 code]# chown -R www.www wordpress/

5)配置nginx

[root@web02 code]# vim /etc/nginx/conf.d/blog.linux.conf
server {
    listen 80;
    server_name blog.linux.com;

    location / {
        root /code/wordpress;
        index index.php;
    }

    location ~ \.php$ {
        root /code/wordpress;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}


nginx关联语法

1)fastcgi_pass

#语法
Syntax:    fastcgi_pass address;
Default:    —
Context:    location, if in location

fastcgi_pass 127.0.0.1:9000;
2)fastcgi_index

#语法
Syntax:    fastcgi_index name;
Default:    —
Context:    http, server, location

fastcgi_index index.php;
3)fastcgi_param

Syntax:    fastcgi_param parameter value [if_not_empty];
Default:    —
Context:    http, server, location

#语法调用模块   变量(标准格式)   站点目录  php文件名字
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param SCRIPT_FILENAME /code/index.php;

6)配置数据库

[root@web02 ~]# mysqladmin -uroot password '123456'
##给数据库设置登录密码

[root@web02 wordpress]# mysql -uroot -p123456
##数据库设置密码后登录方式
MariaDB [(none)]> create database wordpress;
##添加wordpress数据库

7)访问页面配置主题等

附加 nginx和php服务上传文件大小优化

[root@web02 pic]# vim /etc/nginx/nginx.conf
client_max_body_size 100m;

[root@web02 pic]# vim /etc/php.ini
upload_max_filesize = 100M
post_max_size = 100M

静态资源共享

环境准备

主机名称 应用环境 外网地址 内网地址
web01 nginx+php 10.0.0.7 172.16.1.7
web02 nginx+php 10.0.0.8 172.16.1.8
nfs nfs 10.0.0.31 172.16.1.31
db01 mysql 10.0.0.51 172.16.1.51

搭建过程

1.准备服务端机器

1)搭建nfs、rpcbind

[root@nfs ~]# yum install -y nfs-utils rpcbind

2)创建用户及用户组

[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -u 666 -g 666

3)规划创建目录

[root@nfs ~]# mkdir /data/{wordpress,zh,edu} -p

4)授权目录

[root@nfs ~]# chown -R www.www /data/

5)配置nfs

[root@nfs ~]# vim /etc/exports
/data/wordpress 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/zh 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/edu 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

6)启动服务

[root@nfs ~]# systemctl start rpcbind nfs

7)检测配置

[root@nfs ~]# cat /var/lib/nfs/etab 
/data/edu    172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
/data/zh    172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
/data/wordprss    172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)

2.所有web做nfs客户端(所有的web服务器)

1)安装nfs、rpcbind

[root@web01 ~]# yum install -y nfs-utils rpcbind

2)启动rpcbind

3)查看挂载点

[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/edu      172.16.1.0/24
/data/zh       172.16.1.0/24
/data/wordprss 172.16.1.0/24

4)查找图片位置,推送至nfs服务器

#推送wordpress的静态文件
[root@web01 ~]# scp -r /code/wordpress/wp-content/uploads/* 172.16.1.31:/data/wordpress/
#推送wecenter的静态文件
[root@web01 ~]# scp -r /code/zh/uploads/* 172.16.1.31:/data/zh/
#推送edusoho的静态文件
[root@web01 ~]# scp -r /code/edusoho/web/files/* 172.16.1.31:/data/edu/

5)挂载

[root@web01 files]# mount -t nfs 172.16.1.31:/data/wordpress /code/wordpress/wp-content/uploads/
[root@web01 files]# mount -t nfs 172.16.1.31:/data/zh /code/zh/uploads/
[root@web01 files]# mount -t nfs 172.16.1.31:/data/edu /code/edusoho/web/files/

配置负载均衡

[root@lb01 ~]# vim /etc/nginx/conf.d/default.conf
upstream node {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
}

server {
    listen 80;
    server_name blog.linux.com edu.linux.com zh.linux.com;

    location / {
        proxy_pass http://node;
        proxy_set_header Host $http_host;
    }
}

拆分数据库

为什么要拆分数据库

由于单台服务器运行LNMP架构会导致网站访问缓慢,当内存被占满时,很容易导致系统出现oom从而kill掉MySQL数据库,所以要将web和数据库进行独立部署

拆分后解决了什么问题

1.缓解web网站的压力 2.增强数据库读写性能

数据库拆分环境准备

主机名称 应用环境 外网地址 内网地址
web01 nginx+php 10.0.0.7 172.16.1.7
db01 mysql 10.0.0.51 172.16.1.51

开始拆分

1.取出数据库源数据(web01)

[root@web01 ~]# mysqldump -uroot -p -B wordpress > /tmp/wordpress.sql

2.推送源数据至新数据库服务器(web01)

[root@web01 ~]# scp /tmp/wordpress.sql 172.16.1.51:/tmp/

3.安装mariadb(db01)

[root@db01 tmp]# yum install -y mariadb-server

4.启动数据库(db01)

[root@db01 tmp]# systemctl start mariadb

5.导入数据(db01)

[root@db01 tmp]# mysqladmin -uroot password '123456'##给数据库设置密码
[root@db01 tmp]# mysql -uroot -p< /tmp/wordpress.sql##导入数据

6.查看数据库(db01)

[root@db01 tmp]# mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]>

7.把老的数据库停掉(web01)

[root@web01 ~]# systemctl stop mariadb

8.修改博客连接数据的php配置(web01)

[root@web01 ~]# vim /code/wordpress/wp-config.php
/** MySQL数据库用户名 */
define('DB_USER', 'wp');

/** MySQL主机 */
define('DB_HOST', '172.16.1.51');

9.测试远程连接数据库(web01)

[root@web01 ~]# mysql -uroot -p -h 172.16.1.51
#连接拒绝需要远端授权(db01)  

[root@db01 tmp]# mysql -uroot -p
Enter password:
MariaDB [(none)]> grant all on wordpress.* to wp@'172.16.1.%' identified by '123456';##设置远程链接用户和权限  


MariaDB [(none)]> select user,host from mysql.user;#查看授权的用户
+------+------------+
| user | host       |
+------+------------+
| root | 127.0.0.1  |
| wp   | 172.16.1.% |
| root | ::1        |
|      | db01       |
| root | db01       |
|      | localhost  |
| root | localhost  |
+------+------------+
7 rows in set (0.00 sec)

#再次测试远程连接
[root@web01 ~]# mysql -uwp -p123456 -h 172.16.1.51

10.页面访问测试

web服务器扩展

1.安装nginx

1)配置yum源

[root@web02 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

2)安装nginx

[root@web02 ~]# yum install -y nginx

3)创建用户

[root@web02 ~]# groupadd www -g 666
[root@web02 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M

4)配置nginx用户

[root@web02 ~]# vim /etc/nginx/nginx.conf
user www;

5)启动nginx

[root@web01 ~]# systemctl start nginx

2.安装php7.1

1.上传php包

[root@web01 ~]# cd /tmp/
[root@web01 tmp]# rz php.tar.gz

2.)卸载旧版本php

[root@web01 tmp]# yum remove php-mysql-5.4 php php-fpm php-common

3)解压安装php

[root@web01 tmp]# tar xf php.tar.gz
[root@web01 tmp]# yum localinstall -y *.rpm

4)修改用户

[root@web01 tmp]# vim /etc/php-fpm.d/www.conf
user = www
group = www

5)启动php

[root@web01 tmp]# systemctl start php-fpm

验证服务启动

[root@web01 tmp]# netstat -lntp
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      12293/php-fpm: mast 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      12244/nginx: master 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6626/sshd           
[root@web01 tmp]#

统一服务器

1.统一配置文件

[root@web01 code]# rsync -avz --delete  /etc/nginx/ 172.16.1.8:/etc/nginx/
[root@web01 code]# rsync -avz --delete  /etc/php* 172.16.1.8:/etc/

2.统一站点目录

#新的web服务器创建目录
[root@web02 ~]# mkdir /code

#原来的web01服务器打包推送
[root@web01 code]# tar zcf code.tar.gz ./*
[root@web01 code]# scp code.tar.gz 172.16.1.8:/code/

#新的web服务器上解压
[root@web02 code]# cd /code
[root@web02 code]# tar xf code.tar.gz
Copyright © 高程程 all right reserved,powered by Gitbook修订于: 2021-05-18 21:14:35

results matching ""

    No results matching ""